﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BUGCOME.Model.Auth
{
   
    /// <summary>
    /// user_base
    /// </summary>
    [SugarTable("user_base", "用户基础表")]
    [Tenant("0")]
    public class UserBase
    {
        /// <summary>
        /// 用户id 唯一标识，雪花ID
        /// </summary>
        [SugarColumn(IsPrimaryKey = true)]
        public long Id { get; set; }

        /// <summary>
        /// guid 唯一标识 作为 密钥 第一段：密码加密 第二段：内部加密 第三段：外部加密 第四段：聊天加密 第五段：公开加密
        /// </summary>
        public string Guid { get; set; }

        /// <summary>
        /// 登录名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 哈希密码
        /// </summary>
        public string Password { get; set; }

        /// <summary>
        /// 昵称
        /// </summary>
        public string NickName { get; set; }

        /// <summary>
        /// 绑定邮箱
        /// </summary>
        public string Email { get; set; }


        /// <summary>
        /// 绑定手机
        /// </summary>
        public string Phone { get; set; }

        /// <summary>
        /// 用户类型：1 用户基础表 2个人用户表 3 系统用户 4 团队用户 5 团队成员表  这里只需要显示 2, 3, 4 默认是2
        /// </summary>
        public string UserType { get; set; }

        /// <summary>
        /// 用户等级：共7阶段 14级 1. 幼虫期（Lv1-3） 2. 成长期（Lv4-6） 3. 蜕变期（Lv7-9）4. 精英期（Lv10-12） 5. 传奇期（Lv13+） 计算方式 10 次方 等级
        /// </summary>
        public long UserLevel { get; set; }

        /// <summary>
        /// 微信唯一标识
        /// </summary>
        public string OpenId { get; set; }

        /// <summary>
        /// 帐号状态（0停用 1正常）
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// 省
        /// </summary>
        public string Province { get; set; }

        /// <summary>
        /// 市
        /// </summary>
        public string City { get; set; }

        /// <summary>
        /// 删除标志（0代表存在 2代表注销)
        /// </summary>
        public int DelFlag { get; set; }


        /// <summary>
        /// 最后登录ID
        /// </summary>
        public string LoginIP { get; set; }


        /// <summary>
        /// 最后登录时间
        /// </summary>
        public DateTime LoginDate { get; set; }

        /// <summary>
        /// 创建人id
        /// </summary>
        public long CreateId { get; set; }

        /// <summary>
        /// 创建人
        /// </summary>
        public string CreateBy { get; set; }
        /// <summary>
        ///创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 修改人id
        /// </summary>
        public long UpdateId { get; set; } 

        /// <summary>
        /// 修改人
        /// </summary>
        public string UpdateBy { get; set; }

        /// <summary>
        /// 修改时间
        /// </summary>
        public DateTime UpdateTime { get; set; } 


        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }


        /// <summary>
        /// 用户个人导航属性
        /// </summary>
        [Navigate(NavigateType.OneToOne,nameof(UserIndividual.UserId))]
        public UserIndividual UserIndividualNav { get; set; }

        /// <summary>
        /// 用户系统导航属性
        /// </summary>
        [Navigate(NavigateType.OneToOne, nameof(UserSystem.UserId))]
        public UserSystem UserSystemNav { get; set; }


        /// <summary>
        /// 用户团队导航属性
        /// </summary>
        [Navigate(NavigateType.OneToOne, nameof(UserTeam.UserId))]
        public UserTeam UserTeamNav { get; set; }

        #region 表额外字段

        /// <summary>
        /// 获取一个值，该值指示当前用户是否具有超级管理员权限
        /// </summary>
        /// <value>
        /// 如果用户ID等于1则返回<c>true</c>，表示具有超级管理员权限；否则返回<c>false</c>
        /// </value>
        /// <remarks>
        /// 1. 该属性为计算属性，不映射到数据库字段（通过IsIgnore=true标记）
        /// 2. 系统默认将ID=1的用户视为超级超级管理员
        /// 3. 此判断逻辑基于简化设计，实际项目中可能需要通过角色表或权限系统实现
        /// </remarks>
        [SugarColumn(IsIgnore = true)]
        public bool IsAdmin
        {
            get
            {
                // 基于用户ID判断是否为超级管理员：系统默认将ID=1的用户视为超级超级管理员
                return Id == 1;
            }
        }

        /// <summary>
        /// 角色集合
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        [ExcelIgnore]
        public List<Role> Roles { get; set; }

        /// <summary>
        /// 角色id集合
        /// </summary>
        [SugarColumn(IsIgnore = true)]
        [ExcelIgnore]
        public long[] RoleIds { get; set; }

        #endregion

    }
}
